import axios from "axios";
import { useInfoStore } from "../store";
import { ElMessage } from 'element-plus'
import Qs from "qs";
// 调用pinia
const userInfo = useInfoStore();
//设置默认请求头
axios.defaults.headers["Content-Type"] = "application/x-www-form-urlencoded";
// 创建axios实例
const service = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  // 超时
  timeout: 10000,
});

// request拦截器
service.interceptors.request.use(
  (config) => {
    // 是否需要设置 token
    const isToken = (config.headers || {}).isToken === false;
    // 是否需要防止数据重复提交
    const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
    if (isToken) {
      config.headers.authorization = userInfo.token;
    }
    // if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
    //   const requestObj = {
    //     url: config.url,
    //     data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
    //     time: new Date().getTime()
    //   }
    // }

    /*
      判断一下请求头然后如果是utf-8则用qs处理data
    */
    if (
      config.headers["Content-Type"] ===
      "application/x-www-form-urlencoded;charset=UTF-8"
    ) {
      config.data = Qs.stringify(config.data);
    }

    return config;
  },
  (error) => {
    console.log(error);
    Promise.reject(error);
  }
);
// 响应拦截器
service.interceptors.response.use(
  (res) => {
    // 未设置状态码则默认成功状态
    const code = res.data.code || 200;
    console.log(code);
    if (code === 200) {
      // 获取错误信息
      // ElMessage({
      //   message: res.data.msg,
      //   type: 'success',
      // })
      if ( // 二进制数据则直接返回
        res.request.responseType === "blob" ||
        res.request.responseType === "arraybuffer"
      ) {
        return res.data;
      }
      return res;
    } else {
      ElMessage({
        message: res.data.msg,
        type: 'warning',
      })
      return res;
    }
  },
  (error) => {
    ElMessage.error('接口异常')
    console.log(error)
    //   ElMessage({ message: message, type: 'error', duration: 5 * 1000 })
    return Promise.reject(error);
  }
);

export default service;
